package com.fgba.express.util;

import java.util.List;
import java.util.Map;

/**
 * 判空检查
 * @author fgba
 */
public class NullChecker {
    /**
     * 判断字符串是否为空或者为空字符串
     *
     * @param str
     * @return
     */
    public static Boolean isNullOrEmpty(String str) {
        if (str == null) {
            return true;
        }

        return str.isEmpty();
    }

    /**
     * 变量空检查，如果为空则返回设定的默认值
     *
     * @param variable             执行空检查的变量
     * @param defaultVariableValue 变量为空时返回的默认值
     * @return
     */
    public static <T> T checkNullAndReturn(T variable, T defaultVariableValue) {
        if (variable == null) {
            return defaultVariableValue;
        }
        return variable;
    }

    /**
     * 判断集合是否为空
     *
     * @param <T>
     * @param list
     * @return
     */
    public static <T> Boolean isNull(List<T> list) {
        if (list == null || list.size() == 0) {
            return true;
        }

        return false;
    }

    /**
     * 判断集合是否不为空
     *
     * @param <T>
     * @param list
     * @return
     */
    public static <T> Boolean isNotNull(List<T> list) {
        return !NullChecker.isNull(list);
    }

    /**
     * 判断数组是否为空
     *
     * @param <T>
     * @param array
     * @return
     */
    public static <T> Boolean isNull(T[] array) {
        if (array == null || array.length == 0) {
            return true;
        }

        return false;
    }

    /**
     * 判断对象是否为空,注意:此方法只用于判断对象是否为null,不能用于判断字符串是否为空字符串
     *
     * @param <T>    对象
     * @param object
     * @return
     */
    public static <T> Boolean isNull(T object) {
        return null == object;
    }

    /**
     * 判断集合是否为空
     *
     * @param <T>
     * @param map
     * @return
     */
    public static <T, K> Boolean isNull(Map<T, K> map) {
        if (map == null || map.isEmpty()) {
            return true;
        }

        return false;
    }

    /**
     * 判断整数是否为空或者为0
     *
     * @param integerData
     * @return
     */
    public static Boolean isNullOrZero(Integer integerData) {
        if (integerData == null) {
            return true;
        }

        return CommonUtils.equals(integerData, 0);
    }

    /**
     * 判断长整数是否为空或者为0
     *
     * @param longData
     * @return
     */
    public static Boolean isNullOrZero(Long longData) {
        if (longData == null) {
            return true;
        }
        // 此处必须用OL,否则无法判断为0
        return CommonUtils.equals(longData, 0L);
    }
}
